package com.wh.accesscontrol.util;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;


public class PropUtil {

//    private static Properties prop = null;

    public static void add(String fileName, Map<String, String> map, String comment) {
        Properties props = new Properties();
        try {
            String str = PropUtil.class.getClassLoader().getResource("/").getFile() + fileName;
            OutputStream oFile = new FileOutputStream(str);
            props.putAll(map);
            props.store(oFile, comment);
            oFile.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static String getValue(String fileName, String key) {
        Properties prop = new Properties();
        try {
            prop.clear();
            prop.load(PropUtil.class.getClassLoader().getResource(fileName).openStream());
            return prop.getProperty(key);
        } catch (Exception e) {
            return null;
        }
    }

    public static Properties getAll(String fileName) {
        Properties prop = new Properties();
        Map<String, String> map = new HashMap<String, String>();
        try {
            prop.clear();
            prop.load(PropUtil.class.getClassLoader().getResource(fileName).openStream());
            return prop;
        } catch (Exception e) {
            return null;
        }
    }


    public static boolean update(String fileName, Map<String, String> map, String comment) {
        Properties props = new Properties();
        try {
            String str = PropUtil.class.getClassLoader().getResource("./").getFile() + fileName;
            props.load(new FileInputStream(str));
            // 调用 Hashtable 的方法 put，使用 getProperty 方法提供并行性。
            // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
            OutputStream fos = new FileOutputStream(str);
            props.putAll(map);
            // 以适合使用 load 方法加载到 Properties 表中的格式，
            // 将此 Properties 表中的属性列表（键和元素对）写入输出流
            props.store(fos, comment);
            fos.close();
            return true;
        } catch (IOException e) {
            System.err.println("属性文件更新错误");
            e.printStackTrace();
            return false;
        }
    }
}
